//
//  MMGPrizeClawGameControlHandler.hpp
//  DollsVending
//
//  Created by Don on 2017/11/2.
//  Copyright © 2017年 Memego, Inc. All rights reserved.
//

#ifndef MMGPrizeClawGameControlHandler_hpp
#define MMGPrizeClawGameControlHandler_hpp
#ifdef __cplusplus
extern "C" {
#endif
#include <stdio.h>
//    enum GAME_CONTROLS {
//        CTRL_UP = 0, CTRL_DOWN, CTRL_LEFT, CTRL_RIGHT,
//        CTRL_UP_LEFT, CTRL_UP_RIGHT, CTRL_DOWN_LEFT, CTRL_DOWN_RIGHT,
//        CTRL_DOWN_CLAW,CTRL_NONE
//    };
#include "game_protocol.h"
   // const char* command, const char* data, int code
    // 定义函数指针类型
    typedef void (*MMGGameControlMessageDidReceiveHandler)(void *ref, const char* command, const char* data, int code);
    class MMGPrizeClawGameControlHandler {
    public:
        ~MMGPrizeClawGameControlHandler();
        static MMGPrizeClawGameControlHandler *getInstance();
        
        void initGameproto();
        void uninitGameproto();
        
        /** 发送消息
         *         command                消息名称
         *         data                消息内容
         *         code                消息参数
         *     *注意：
         *          1. 连接后台服务器时，发送"CONNECT"消息，data=服务器地址, code=服务器端口
         *             后台服务器连接成功后，通过回调返回"CONNECT_ACK"消息，data=连接状态说明，code=1表示连接成功，其它不成功
         *          2. APP退出游戏页面时，发送""QUIT"消息，data=null, code=延时关闭的秒数
         */
        void gameprotoSendmessage(NSString *command, NSString *data, int code);
        /** 发送控制指令
         *         ctrl        控制指令
         *         param        游戏流水号，当发送下爪时，填入流水号，其它控制指令则为null
         */
        void gameprotoSendcontrol(int ctrl, NSString *param);
        
        void registerGameControlMessageDidReceiveCallBackFunction(void *,MMGGameControlMessageDidReceiveHandler);
        
    private:
        // 要实现这个回调的对象
        void *ref = NULL;
        
        // 函数声明
        MMGGameControlMessageDidReceiveHandler messageDidReceiveHandler = NULL;
        
        MMGPrizeClawGameControlHandler();
        //把复制构造函数和=操作符也设为私有,防止被复制
        MMGPrizeClawGameControlHandler(const MMGPrizeClawGameControlHandler&);
        MMGPrizeClawGameControlHandler& operator=(const MMGPrizeClawGameControlHandler&);
        
        static void onControlMessageDidReceive(const char* command, const char* data, int code);
        
    };
#ifdef __cplusplus
}
#endif
#endif /* MMGPrizeClawGameControlHandler_hpp */
